const { OrderModel, UserModel } = require('../../models/index')

//用户提交订单
const userSubmitOrder = async (req, res) => {
  try {
    // 获取用户提交的订单数据
    const orderData = req.body

    // 检查订单数据是否存在
    if (!orderData) {
      return res.status(404).json({
        error: '订单信息不能为空'
      })
    }

    // 将订单数据保存到数据库中
    const newOrder = await OrderModel.create(orderData)

    // 返回成功响应
    res.status(200).json({
      title: '新建订单成功',
      data: newOrder.order_id
    })
  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

// 用户确认付款
const userPayOrder = async (req, res) => {
  try {
    // 获取用户提交的付款数据
    let { orderID, userID, totalPrice } = req.body

    // 支付信息缺失的情况
    if (!userID || !orderID || !totalPrice) {
      return res.status(400).json({
        error: '支付信息缺失！'
      })
    }

    const payUser = await UserModel.findByPk(userID)

    // 用户不存在的情况
    if (!payUser) {
      return res.status(404).json({ error: '用户不存在' })
    }

    payUser.money = parseFloat(payUser.money)
    totalPrice = parseFloat(totalPrice)

    // 账户余额不足的情况
    if (payUser.money < totalPrice) {
      return res.status(400).json({ error: '账户余额不足' })
    }

    // 扣除用户余额
    payUser.money -= totalPrice
    await payUser.save()

    // 更新订单状态为已付款
    await OrderModel.update(
      { status: 1 },
      { where: { order_id: orderID } }
    )

    return res.status(200).json({ title: '支付成功' })
  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

// 返回用户的订单记录
const userOrderRecords = async (req, res) => {
  try {
    // 获取用户ID
    const { userID } = req.params

    // 获取需要返回不同的订单状态
    let { orderStatus } = req.query

    if (!userID || !orderStatus) {
      return res.status(400).json({ error: '缺少必要参数' })
    }

    // 构造查询条件
    const queryCondition = {
      user_id: userID
    }

    if (orderStatus !== 'all') {
      orderStatus = parseInt(orderStatus, 10)
      if (isNaN(orderStatus) || ![0, 1, 2].includes(orderStatus)) {
        return res.status(400).json({ error: '无效的订单状态' })
      }
      queryCondition.status = orderStatus
    }

    // 查找订单记录
    const orderRecords = await OrderModel.findAll({
      where: queryCondition,
      order: [
        ['updatedAt', 'DESC'],
        ['createdAt', 'DESC']
      ],
    })

    // 返回成功的响应
    return res.status(200).json({
      title: '用户订单记录',
      data: orderRecords
    })
  } catch (error) {
    res.status(500).json({
      error: error.message
    })
  }
}

// 用户取消订单
const userCancelOrder = async (req, res) => {
  try {
    // 从请求体中获取必要参数
    let { orderID, userID, totalPrice } = req.body;

    if (!userID || !orderID || !totalPrice) {
      return res.status(400).json({
        error: '必要参数缺失！'
      });
    }

    // 查找用户
    const user = await UserModel.findByPk(userID);
    if (!user) {
      return res.status(404).json({ error: '用户不存在' });
    }

    // 查找订单信息
    const order = await OrderModel.findOne({ where: { order_id: orderID } });
    if (!order) {
      return res.status(404).json({ error: '订单不存在' });
    }

    // 如果订单已取消，则直接返回错误提示
    if (order.status === 3) {
      return res.status(400).json({ error: '订单已取消' });
    }

    // 如果订单已经支付（假设 status === 1 表示已支付），则进行退款操作
    if (order.status === 1) {
      // 退款：将订单总价退回到用户余额中
      user.money = parseFloat(user.money) + parseFloat(totalPrice);
      await user.save();
    }

    // 更新订单状态为已取消
    await OrderModel.update(
      { status: 3 },
      { where: { order_id: orderID } }
    );

    return res.status(200).json({ title: '订单取消成功' });
  } catch (error) {
    return res.status(500).json({
      error: error.message
    });
  }
};

// 用户确认出行
const userConfirmTravel = async (req, res) => {
  try {
    // 从请求体中获取订单ID
    const orderID = req.params.orderID;

    if (!orderID) {
      return res.status(400).json({
        error: '订单ID缺失！'
      });
    }

    // 查找订单信息
    const order = await OrderModel.findOne({ where: { order_id: orderID } });
    if (!order) {
      return res.status(404).json({ error: '订单不存在' });
    }

    // 检查订单状态
    if (order.status !== 1) {
      return res.status(400).json({ error: '订单状态不允许确认出行' });
    }

    // 更新订单状态为已确认出行
    await OrderModel.update(
      { status: 2 },
      { where: { order_id: orderID } }
    );

    return res.status(200).json({ message: '出行确认成功' });
  } catch (error) {
    return res.status(500).json({
      error: error.message
    });
  }
};

module.exports = {
  userSubmitOrder,
  userPayOrder,
  userOrderRecords,
  userCancelOrder,
  userConfirmTravel
}